package com.jsbs.iam.auth.mapper;

import com.jsbs.iam.auth.dto.IamStaticUserGroupAddDto;
import com.jsbs.iam.auth.dto.IamStaticUserGroupEditDto;
import com.jsbs.iam.auth.dto.IamStaticUserGroupUsersAddDto;
import com.jsbs.iam.auth.dto.IamStaticUserGroupUsersRemoveDto;
import com.jsbs.iam.auth.param.IamApplyDetaislParam;
import com.jsbs.iam.auth.param.IamQueryStaticUserGroupParam;
import com.jsbs.iam.auth.param.IamQueryStaticUserGroupUsersParam;
import com.jsbs.iam.auth.param.IamStaticUserGroupDeleteParam;
import com.jsbs.iam.auth.vo.IamUserGroupVo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @ClassName: UserGroupManagerMapper
 * @Author: tenghuawei
 * @Date: 2023/1/5 15:28
 * @Description: 静态用户组
 */

@Mapper
@Repository
public interface IamStaticUserGroupManagerMapper {

    /**
     * 功能描述：获取静态用户组编码当前最大值
     * @param
     * @return Integer
     */
    Integer getMaxStaticUserGroupCode();

    /**
     * 功能描述：新增静态用户组
     * @param iamStaticUserGroupAddDto
     * @return int
     */
    int createStaticUserGroup (@Param("iamStaticUserGroupAddDto") IamStaticUserGroupAddDto iamStaticUserGroupAddDto);

    /**
     * 功能描述：查询静态用户组
     * @param iamQueryStaticUserGroupParam
     * @return List
     */
    List<IamUserGroupVo> queryUserGroup(@Param("iamQueryStaticUserGroupParam") IamQueryStaticUserGroupParam iamQueryStaticUserGroupParam);

    /**
     * 功能描述：编辑静态用户组
     * @param iamStaticUserGroupEditDto
     * @return int
     */
   int userGroupEdit(@Param("iamStaticUserGroupEditDto") IamStaticUserGroupEditDto iamStaticUserGroupEditDto);

    /**
     * 功能描述：根据普管角色编码 + 用户组编码+租户编码，删除动、静态用户组
     * @param iamStaticUserGroupDeleteParam
     * @return int
     */
   int userGroupDelete(IamStaticUserGroupDeleteParam iamStaticUserGroupDeleteParam);

    /**
     * 功能描述：查询某个静态用户组下的用户id集合
     * @param iamQueryStaticUserGroupUsersParam
     * @return List
     */
    List<String> queryUserGroupUsers(@Param("iamQueryStaticUserGroupUsersParam") IamQueryStaticUserGroupUsersParam iamQueryStaticUserGroupUsersParam);

    /**
     * 功能描述：某个静态用户组下新增用户
     * @param iamStaticUserGroupUsersAddDto
     * @return int
     */
    int userGroupUserAdd(@Param("iamStaticUserGroupUsersAddDto") IamStaticUserGroupUsersAddDto iamStaticUserGroupUsersAddDto);

    /**
     * 功能描述：某个静态用户组下移除用户
     * @param iamStaticUserGroupUsersRemoveDto
     * @return int
     */
    int userGroupUsersRemove(@Param("iamStaticUserGroupUsersRemoveDto") IamStaticUserGroupUsersRemoveDto iamStaticUserGroupUsersRemoveDto);

    /**
     * 功能描述：根据用户id+租户，查询该用户的归属的所有的 用户组+应用编码
     * @param iamApplyDetaislParam
     * @return List // todo +dt用户组
     */
    @MapKey("id")
    List<Map<String,String>> queryApplyCodeByUserCode(@Param("iamApplyDetaislParam")IamApplyDetaislParam iamApplyDetaislParam);

}
